/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package usocalculadora;
import java.util.StringTokenizer;
import java.util.Vector;

/**
 * En esta clase se crea un objeto de pila,
 * para poder implementar la interfaz stack.
 * @author Magaly
 */
public class Calculadora {
   
private Pila<Integer> pila;
    

 /**
    *Constructor    
    */
public Calculadora(){    
     pila = new Pila<Integer>();

}

 /**
    *Se separa la cadena y de una vez se evalua
    *si lo ingresado fue un numero o un operador aritmetico. 
    * @param cadenaX, cadena ingresada por usuario
    * @return void
    */

public void Calcular(String cadenaX)
{      
   
//Se crea un string en base a la cadena, con los valores
// que estan separados por un espacio.
    
    StringTokenizer cadenaTemp = new StringTokenizer(cadenaX);
        
    // Mientras cadenaTemp todavia tiene caracteres.
    
        while (cadenaTemp.hasMoreTokens()) {
          
                  String temp = cadenaTemp.nextToken();          
                  int val;
   
     //Se verifica si es numero.
                  
                  while (true) {
                          try {
                              val = Integer.parseInt(temp);
                              pila.push(val);
     
                          }catch (NumberFormatException n) {
     
     //Si no es numero, se verifica si es un operando
     
                              if ("+".equals(temp)){
     //Si es operando, se verifica que no este vacia la pila.
                                  
                                     if (!pila.empty()){ 
     //Se calcula la operacion.          
                                        int num=(pila.pop()+pila.pop());
                                        pila.push(num);
     //Se muestra el resultado de la operacion
                                        System.out.println(Integer.toString(num));     
        
                                    }
                                 }
                          if (!pila.empty()){ 
                                if ("*".equals(temp)){
                                    int num=(pila.pop()*pila.pop());
                                    pila.push(num);
         
                                    System.out.println(Integer.toString(num));     
        
                                    }
                          }
                         
                           if (!pila.empty()){ 
                                if ("-".equals(temp)){
                                    int num=(pila.pop()-pila.pop());
                                    pila.push(num);
         
                                    System.out.println(Integer.toString(num));     
        
                                    }
                         
                           }
                            
                            if (!pila.empty()){ 
                                     if ("/".equals(temp)){
                                        int num=(pila.pop()/pila.pop());
                                        pila.push(num);
         
                                        System.out.println(Integer.toString(num));     
                                } 
                            }  
                            }  //finaliza catch
                       break;    
                    } //finaliza while de la exception
                   } //finaliza while si no  hay mas caracteres
         }
}